{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "eRL_demo_StockTrading.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/AI4Finance-LLC/ElegantRL/blob/master/eRL_demo_StockTrading.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "c1gUG3OCJ5GS"
      },
      "source": [
        "# **Stock Trading Application in ElegantRL**\n",
        "\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FGXyBBvL0dR2"
      },
      "source": [
        "# **Part 1: Problem Formulation**\n",
        "Formally, we model stock trading as a Markov Decision Process (MDP), and formulate the trading objective as maximization of expected return:\n",
        "\n",
        "\n",
        "\n",
        "*   **State s = [b, p, h]**: a vector that includes the remaining balance b, stock prices p, and stock shares h. p and h are vectors with D dimension, where D denotes the number of stocks. \n",
        "*   **Action a**: a vector of actions over D stocks. The allowed actions on each stock include selling, buying, or holding, which result in decreasing, increasing, or no change of the stock shares in h, respectively.\n",
        "*   **Reward r(s, a, s’)**: The asset value change of taking action a at state s and arriving at new state s’.\n",
        "*   **Policy π(s)**: The trading strategy at state s, which is a probability distribution of actions at state s.\n",
        "*   **Q-function Q(s, a)**: the expected return (reward) of taking action a at state s following policy π.\n",
        "*   **State-transition**: After taking the actions a, the number of shares h is modified, as shown in Fig 3, and the new portfolio is the summation of the balance and the total value of the stocks."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jESlu_WtD_JS"
      },
      "source": [
        "# **Part 2: Stock Trading Environment Design**\n",
        "\n",
        "**State Space and Action Space**\n",
        "\n",
        "\n",
        "*   **State Space**: We use a 181-dimensional vector consists of seven parts of information to represent the state space of multiple stocks trading environment: [b, p, h, M, R, C, X], where b is the balance, p is the stock prices, h is the number of shares, M is the Moving Average Convergence Divergence (MACD), R is the Relative Strength Index (RSI), C is the Commodity Channel Index (CCI), and X is the Average Directional Index (ADX).\n",
        "*   **Action Space**: As a recap, we have three types of actions: selling, buying, and holding for a single stock. We use the negative value for selling, positive value for buying, and zero for holding. In this case, the action space is defined as {-k, …, -1, 0, 1, …, k}, where k is the maximum share to buy or sell in each transaction.\n",
        "\n",
        "\n",
        "**Easy-to-customize Features**\n",
        "\n",
        "\n",
        "*   **initial_capital**: the initial capital that the user wants to invest.\n",
        "*   **tickers**: the stocks that the user wants to trade with.\n",
        "*   **initial_stocks**: the initial amount of each stock and the default could be zero.\n",
        "*   **buy_cost_pct, sell_cost_pct**: the transaction fee of each buying or selling transaction.\n",
        "*   **max_stock**: the user is able to define the maximum number of stocks that are allowed to trade per transaction. Users can also set the maximum percentage of capitals to invest in each stock.\n",
        "*   **tech_indicator_list**: the list of financial indicators that are taken into account, which is used to define a state.\n",
        "*   **start_date, start_eval_date, end_eval_date**: the training and backtesting time intervals. Thee time dates (or timestamps) are used, once the training period is specified, the rest is backtesting.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DbamGVHC3AeW"
      },
      "source": [
        "# **Part 3: Install ElegantRL and related packages**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "U35bhkUqOqbS",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "e67021c0-4daf-408c-f6c2-e34b442ad45a"
      },
      "source": [
        "!pip install git+https://github.com/AI4Finance-LLC/ElegantRL.git\n",
        "!pip install yfinance stockstats"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting git+https://github.com/AI4Finance-LLC/ElegantRL.git\n",
            "  Cloning https://github.com/AI4Finance-LLC/ElegantRL.git to /tmp/pip-req-build-vlb58ahd\n",
            "  Running command git clone -q https://github.com/AI4Finance-LLC/ElegantRL.git /tmp/pip-req-build-vlb58ahd\n",
            "Requirement already satisfied: gym in /usr/local/lib/python3.7/dist-packages (from elegantrl==0.3.1) (0.17.3)\n",
            "Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from elegantrl==0.3.1) (3.2.2)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from elegantrl==0.3.1) (1.19.5)\n",
            "Collecting pybullet\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/bc/3e/8110ff17460ce718dbf07745325ac74444101f7133062937e1172ae87ef0/pybullet-3.1.3-cp37-cp37m-manylinux1_x86_64.whl (89.3MB)\n",
            "\u001b[K     |████████████████████████████████| 89.3MB 99kB/s \n",
            "\u001b[?25hRequirement already satisfied: torch in /usr/local/lib/python3.7/dist-packages (from elegantrl==0.3.1) (1.8.1+cu101)\n",
            "Requirement already satisfied: opencv-python in /usr/local/lib/python3.7/dist-packages (from elegantrl==0.3.1) (4.1.2.30)\n",
            "Collecting box2d-py\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/87/34/da5393985c3ff9a76351df6127c275dcb5749ae0abbe8d5210f06d97405d/box2d_py-2.3.8-cp37-cp37m-manylinux1_x86_64.whl (448kB)\n",
            "\u001b[K     |████████████████████████████████| 450kB 33.8MB/s \n",
            "\u001b[?25hRequirement already satisfied: pyglet<=1.5.0,>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from gym->elegantrl==0.3.1) (1.5.0)\n",
            "Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in /usr/local/lib/python3.7/dist-packages (from gym->elegantrl==0.3.1) (1.3.0)\n",
            "Requirement already satisfied: scipy in /usr/local/lib/python3.7/dist-packages (from gym->elegantrl==0.3.1) (1.4.1)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->elegantrl==0.3.1) (2.8.1)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->elegantrl==0.3.1) (2.4.7)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->elegantrl==0.3.1) (0.10.0)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->elegantrl==0.3.1) (1.3.1)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch->elegantrl==0.3.1) (3.7.4.3)\n",
            "Requirement already satisfied: future in /usr/local/lib/python3.7/dist-packages (from pyglet<=1.5.0,>=1.4.0->gym->elegantrl==0.3.1) (0.16.0)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->elegantrl==0.3.1) (1.15.0)\n",
            "Building wheels for collected packages: elegantrl\n",
            "  Building wheel for elegantrl (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for elegantrl: filename=elegantrl-0.3.1-cp37-none-any.whl size=65375 sha256=e5c398962e21433099780f537994791dd70af0a28d0ea65ffbf4b6ada9bc8560\n",
            "  Stored in directory: /tmp/pip-ephem-wheel-cache-t3r8ymlp/wheels/d0/f4/2e/cec0c14b57c2094a2bcef3063f95d758ad1309a640ff100419\n",
            "Successfully built elegantrl\n",
            "Installing collected packages: pybullet, box2d-py, elegantrl\n",
            "Successfully installed box2d-py-2.3.8 elegantrl-0.3.1 pybullet-3.1.3\n",
            "Collecting yfinance\n",
            "  Downloading https://files.pythonhosted.org/packages/a7/ee/315752b9ef281ba83c62aa7ec2e2074f85223da6e7e74efb4d3e11c0f510/yfinance-0.1.59.tar.gz\n",
            "Collecting stockstats\n",
            "  Downloading https://files.pythonhosted.org/packages/32/41/d3828c5bc0a262cb3112a4024108a3b019c183fa3b3078bff34bf25abf91/stockstats-0.3.2-py2.py3-none-any.whl\n",
            "Requirement already satisfied: pandas>=0.24 in /usr/local/lib/python3.7/dist-packages (from yfinance) (1.1.5)\n",
            "Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.7/dist-packages (from yfinance) (1.19.5)\n",
            "Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.7/dist-packages (from yfinance) (2.23.0)\n",
            "Requirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from yfinance) (0.0.9)\n",
            "Collecting lxml>=4.5.1\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/cf/4d/6537313bf58fe22b508f08cf3eb86b29b6f9edf68e00454224539421073b/lxml-4.6.3-cp37-cp37m-manylinux1_x86_64.whl (5.5MB)\n",
            "\u001b[K     |████████████████████████████████| 5.5MB 6.8MB/s \n",
            "\u001b[?25hCollecting int-date>=0.1.7\n",
            "  Downloading https://files.pythonhosted.org/packages/43/27/31803df15173ab341fe7548c14154b54227dfd8f630daa09a1c6e7db52f7/int_date-0.1.8-py2.py3-none-any.whl\n",
            "Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24->yfinance) (2.8.1)\n",
            "Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24->yfinance) (2018.9)\n",
            "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (2.10)\n",
            "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (3.0.4)\n",
            "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (1.24.3)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (2020.12.5)\n",
            "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.7/dist-packages (from int-date>=0.1.7->stockstats) (1.15.0)\n",
            "Building wheels for collected packages: yfinance\n",
            "  Building wheel for yfinance (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for yfinance: filename=yfinance-0.1.59-py2.py3-none-any.whl size=23442 sha256=dae0b574100ff4905ce98d78e4a602d02789d37b7a8cd59cba5d71ae8a001ddd\n",
            "  Stored in directory: /root/.cache/pip/wheels/f8/2a/0f/4b5a86e1d52e451757eb6bc17fd899629f0925c777741b6d04\n",
            "Successfully built yfinance\n",
            "Installing collected packages: lxml, yfinance, int-date, stockstats\n",
            "  Found existing installation: lxml 4.2.6\n",
            "    Uninstalling lxml-4.2.6:\n",
            "      Successfully uninstalled lxml-4.2.6\n",
            "Successfully installed int-date-0.1.8 lxml-4.6.3 stockstats-0.3.2 yfinance-0.1.59\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UVdmpnK_3Zcn"
      },
      "source": [
        "# **Part 4: Import Packages**\n",
        "\n",
        "\n",
        "*   **ElegantRL**\n",
        "*   **yfinance**: yfinance aims to solve this problem by offering a reliable, threaded, and Pythonic way to download historical market data from Yahoo! finance.\n",
        "*   **StockDataFrame**: stockstats inherits and extends pandas.DataFrame to support Stock Statistics and Stock Indicators.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1VM1xKujoz-6"
      },
      "source": [
        "from elegantrl.run import *\n",
        "from elegantrl.agent import AgentPPO, AgentDDPG\n",
        "from elegantrl.envs.FinRL.StockTrading import StockTradingEnv, check_stock_trading_env\n",
        "import yfinance as yf\n",
        "from stockstats import StockDataFrame as Sdf"
      ],
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3n8zcgcn14uq"
      },
      "source": [
        "# **Part 5: Specify Agent and Environment**\n",
        "\n",
        "*   **args.agent**: firstly chooses one DRL algorithm to use from agent.py. In this application, we prefer to choose DDPG and PPO agent.\n",
        "*   **args.env**: creates the environment, and the user can either customize own environment or preprocess environments from OpenAI Gym and PyBullet Gym from env.py. In this application, we create the self-designed stock trading environment.\n",
        "\n",
        "\n",
        "> Before finishing initialization of **args**, please see Arguments() in run.py for more details about adjustable hyper-parameters.\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "E03f6cTeajK4",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "2e47cb16-baa0-487d-ca71-ac6c2d249e6b"
      },
      "source": [
        "# Agent\n",
        "args = Arguments(if_on_policy=True)\n",
        "args.agent = AgentPPO() # AgentSAC(), AgentTD3(), AgentDDPG()\n",
        "args.agent.if_use_gae = True\n",
        "args.agent.lambda_entropy = 0.04\n",
        "\n",
        "# Environment\n",
        "tickers = [\n",
        "  'AAPL', 'ADBE', 'ADI', 'ADP', 'ADSK', 'ALGN', 'ALXN', 'AMAT', 'AMD', 'AMGN',\n",
        "  'AMZN', 'ASML', 'ATVI', 'BIIB', 'BKNG', 'BMRN', 'CDNS', 'CERN', 'CHKP', 'CMCSA',\n",
        "  'COST', 'CSCO', 'CSX', 'CTAS', 'CTSH', 'CTXS', 'DLTR', 'EA', 'EBAY', 'FAST',\n",
        "  'FISV', 'GILD', 'HAS', 'HSIC', 'IDXX', 'ILMN', 'INCY', 'INTC', 'INTU', 'ISRG',\n",
        "  'JBHT', 'KLAC', 'LRCX', 'MAR', 'MCHP', 'MDLZ', 'MNST', 'MSFT', 'MU', 'MXIM',\n",
        "  'NLOK', 'NTAP', 'NTES', 'NVDA', 'ORLY', 'PAYX', 'PCAR', 'PEP', 'QCOM', 'REGN',\n",
        "  'ROST', 'SBUX', 'SIRI', 'SNPS', 'SWKS', 'TTWO', 'TXN', 'VRSN', 'VRTX', 'WBA',\n",
        "  'WDC', 'WLTW', 'XEL', 'XLNX']  # finrl.config.NAS_74_TICKER\n",
        "\n",
        "tech_indicator_list = [\n",
        "  'macd', 'boll_ub', 'boll_lb', 'rsi_30', 'cci_30', 'dx_30',\n",
        "  'close_30_sma', 'close_60_sma']  # finrl.config.TECHNICAL_INDICATORS_LIST\n",
        "\n",
        "gamma = 0.99\n",
        "max_stock = 1e2\n",
        "initial_capital = 1e6\n",
        "initial_stocks = np.zeros(len(tickers), dtype=np.float32)\n",
        "buy_cost_pct = 1e-3\n",
        "sell_cost_pct = 1e-3\n",
        "start_date = '2008-03-19'\n",
        "start_eval_date = '2016-01-01'\n",
        "end_eval_date = '2021-01-01'\n",
        "\n",
        "args.env = StockTradingEnv('./', gamma, max_stock, initial_capital, buy_cost_pct, \n",
        "                           sell_cost_pct, start_date, start_eval_date, \n",
        "                           end_eval_date, tickers, tech_indicator_list, \n",
        "                           initial_stocks, if_eval=False)\n",
        "args.env_eval = StockTradingEnv('./', gamma, max_stock, initial_capital, buy_cost_pct, \n",
        "                           sell_cost_pct, start_date, start_eval_date, \n",
        "                           end_eval_date, tickers, tech_indicator_list, \n",
        "                           initial_stocks, if_eval=True)\n",
        "\n",
        "args.env.target_reward = 3\n",
        "args.env_eval.target_reward = 3\n",
        "\n",
        "# Hyperparameters\n",
        "args.gamma = gamma\n",
        "args.break_step = int(2e5)\n",
        "args.net_dim = 2 ** 9\n",
        "args.max_step = args.env.max_step\n",
        "args.max_memo = args.max_step * 4\n",
        "args.batch_size = 2 ** 10\n",
        "args.repeat_times = 2 ** 3\n",
        "args.eval_gap = 2 ** 4\n",
        "args.eval_times1 = 2 ** 3\n",
        "args.eval_times2 = 2 ** 5\n",
        "args.if_allow_break = False\n",
        "args.rollout_num = 2 # the number of rollout workers (larger is not always faster)"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "| FeatureEngineer: start processing data (2 minutes)\n",
            "| YahooDownloader: start downloading data (1 minute)\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "[*********************100%***********************]  1 of 1 completed\n",
            "Shape of DataFrame:  (389634, 8)\n",
            "| YahooDownloader: finish downloading data\n",
            "Successfully added technical indicators\n",
            "Successfully added turbulence index\n",
            "| FeatureEngineer: finish processing data\n",
            "| price_ary.shape: (1962, 74), tech_ary.shape: (1962, 592)\n",
            "| price_ary.shape: (1259, 74), tech_ary.shape: (1259, 592)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "z1j5kLHF2dhJ"
      },
      "source": [
        "# **Part 6: Train and Evaluate the Agent**\n",
        "\n",
        "> The training and evaluating processes are all finished inside function **train_and_evaluate_mp()**, and the only parameter for it is **args**. It includes the fundamental objects in DRL:\n",
        "\n",
        "*   agent,\n",
        "*   environment.\n",
        "\n",
        "> And it also includes the parameters for training-control:\n",
        "\n",
        "*   batch_size,\n",
        "*   target_step,\n",
        "*   reward_scale,\n",
        "*   gamma, etc.\n",
        "\n",
        "> The parameters for evaluation-control:\n",
        "\n",
        "*   break_step,\n",
        "*   random_seed, etc.\n",
        "\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KGOPSD6da23k",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "2fdbfc4b-80a2-4659-ace5-b3bde0f36d8e"
      },
      "source": [
        "train_and_evaluate_mp(args) # the training process will terminate once it reaches the target reward."
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "| GPU id: 0, cwd: ./AgentPPO/StockTradingEnv-v1_0\n",
            "| Remove history\n",
            "ID      Step      MaxR |    avgR      stdR       objA      objC |  avgS  stdS\n",
            "0   7.84e+03      2.60 |\n",
            "0   7.84e+03      2.60 |    2.60      0.03      -0.50      6.14 |  1258     0\n",
            "0   1.57e+04      2.66 |\n",
            "0   1.57e+04      2.66 |    2.66      0.03      -0.50      2.69 |  1258     0\n",
            "0   2.35e+04      3.01 |\n",
            "0   2.35e+04      3.01 |    3.01      0.02      -0.50      2.10 |  1258     0\n",
            "0   3.14e+04      3.01 |    2.84      0.03      -0.50      2.29 |  1258     0\n",
            "0   3.92e+04      3.05 |\n",
            "0   3.92e+04      3.05 |    3.05      0.04      -0.50      1.49 |  1258     0\n",
            "0   4.71e+04      3.05 |    2.89      0.03      -0.50      1.43 |  1258     0\n",
            "0   5.49e+04      3.05 |    2.60      0.02      -0.50      1.60 |  1258     0\n",
            "0   6.28e+04      3.05 |    2.73      0.03      -0.50      2.46 |  1258     0\n",
            "0   7.06e+04      3.05 |    2.43      0.02      -0.50      2.24 |  1258     0\n",
            "0   7.84e+04      3.05 |    2.76      0.04      -0.50      2.73 |  1258     0\n",
            "0   8.63e+04      3.05 |    2.77      0.05      -0.50      2.26 |  1258     0\n",
            "0   9.41e+04      3.05 |    2.74      0.02      -0.50      1.94 |  1258     0\n",
            "0   1.02e+05      3.05 |    2.66      0.02      -0.50      2.54 |  1258     0\n",
            "0   1.10e+05      3.05 |    2.95      0.05      -0.50      2.40 |  1258     0\n",
            "0   1.18e+05      3.05 |    2.68      0.03      -0.50      3.13 |  1258     0\n",
            "0   1.26e+05      3.05 |    2.77      0.02      -0.50      2.16 |  1258     0\n",
            "0   1.33e+05      3.05 |    2.74      0.02      -0.50      2.19 |  1258     0\n",
            "0   1.41e+05      3.05 |    2.69      0.03      -0.50      2.70 |  1258     0\n",
            "0   1.49e+05      3.05 |    2.65      0.03      -0.50      2.10 |  1258     0\n",
            "0   1.57e+05      3.05 |    2.73      0.02      -0.50      2.09 |  1258     0\n",
            "0   1.65e+05      3.05 |    2.71      0.02      -0.50      1.82 |  1258     0\n",
            "0   1.73e+05      3.05 |    2.65      0.03      -0.50      1.20 |  1258     0\n",
            "0   1.80e+05      3.05 |    2.66      0.02      -0.50      1.32 |  1258     0\n",
            "0   1.88e+05      3.05 |    2.72      0.03      -0.50      1.21 |  1258     0\n",
            "0   1.96e+05      3.05 |    2.68      0.02      -0.50      1.62 |  1258     0\n",
            "0   2.04e+05      3.05 |    2.63      0.02      -0.50      0.84 |  1258     0\n",
            "| print_state_norm(): state_dim: (5883, 741) is too large to print its norm. \n",
            "0   2.04e+05      3.05 |    2.61      0.03      -0.50      0.84 |  1258     0\n",
            "| SavedDir: ./AgentPPO/StockTradingEnv-v1_0\n",
            "| UsedTime: 2394\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JPXOxLSqh5cP"
      },
      "source": [
        "Understanding the above results::\n",
        "*   **Step**: the total training steps.\n",
        "*  **MaxR**: the maximum reward.\n",
        "*   **avgR**: the average of the rewards.\n",
        "*   **stdR**: the standard deviation of the rewards.\n",
        "*   **objA**: the objective function value of Actor Network (Policy Network).\n",
        "*   **objC**: the objective function value (Q-value)  of Critic Network (Value Network)."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "v6jvgYPnHMpf"
      },
      "source": [
        "# **Part 7: Backtest and Draw the Graph**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "3jCdezgzQUhh",
        "outputId": "a1ea5861-1ce9-4d44-c94d-3c236eb48428"
      },
      "source": [
        "args = Arguments(if_on_policy=True)\n",
        "args.agent = AgentPPO()\n",
        "args.env = StockTradingEnv(cwd='./', if_eval=True)\n",
        "args.if_remove = False\n",
        "args.cwd = './AgentPPO/StockTradingEnv-v1_0'\n",
        "args.init_before_training()\n",
        "\n",
        "env.draw_cumulative_return(args, torch)"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "| GPU id: 0, cwd: ./AgentPPO/StockTradingEnv-v1_0\n",
            "Loaded act: ./AgentPPO/StockTradingEnv-v1_0\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[0.9996100431208672,\n",
              " 0.9975540989204037,\n",
              " 0.9930264553974011,\n",
              " 0.9905753101188359,\n",
              " 0.9907782222591248,\n",
              " 0.9922023363558229,\n",
              " 0.9849791839332447,\n",
              " 0.9888769172963424,\n",
              " 0.9840406608050026,\n",
              " 0.9839494030512046,\n",
              " 0.9840926030003235,\n",
              " 0.983812247585586,\n",
              " 0.9892388245363505,\n",
              " 0.9866192418230162,\n",
              " 0.9882714282155296,\n",
              " 0.9855228002957779,\n",
              " 0.9866701140243452,\n",
              " 0.9907197917390652,\n",
              " 0.9916871584568279,\n",
              " 0.985137247982608,\n",
              " 0.9843325787025073,\n",
              " 0.9845883512348699,\n",
              " 0.975178530235923,\n",
              " 0.9680374706560326,\n",
              " 0.9680890979168217,\n",
              " 0.9700750967720227,\n",
              " 0.9691342632133019,\n",
              " 0.9728824265506791,\n",
              " 0.9804295632205708,\n",
              " 0.9880481096488657,\n",
              " 0.9849319263166931,\n",
              " 0.9882875128984813,\n",
              " 0.9939328582903155,\n",
              " 0.9891626096787824,\n",
              " 0.991684286742015,\n",
              " 0.9951133745014058,\n",
              " 0.9945511363286421,\n",
              " 0.9915123551598487,\n",
              " 1.0033724893547356,\n",
              " 1.0039307193208893,\n",
              " 1.001659508624246,\n",
              " 0.9996454477608846,\n",
              " 0.9998798733819166,\n",
              " 0.994719210858564,\n",
              " 0.9940160132329748,\n",
              " 0.9931437875458491,\n",
              " 1.0011289942193478,\n",
              " 1.000435673130807,\n",
              " 0.9974249944518835,\n",
              " 0.9983166447801665,\n",
              " 0.9954453780635558,\n",
              " 0.9985711932683449,\n",
              " 1.0014086813354859,\n",
              " 1.004084431266995,\n",
              " 1.0000926956739962,\n",
              " 1.001389351611765,\n",
              " 0.9997419542871259,\n",
              " 1.0066973428054495,\n",
              " 1.0090545948163039,\n",
              " 1.0118203458639459,\n",
              " 1.0146196728745116,\n",
              " 1.0140961026455413,\n",
              " 1.0113964596462395,\n",
              " 1.0252797188659684,\n",
              " 1.0156449261701324,\n",
              " 1.0152130941143338,\n",
              " 1.0102248669251515,\n",
              " 1.0131670908347716,\n",
              " 1.0216220786886931,\n",
              " 1.0208189104481336,\n",
              " 1.0193117662844913,\n",
              " 1.0259474815110103,\n",
              " 1.0236255699416548,\n",
              " 1.0203740631955611,\n",
              " 1.0250801518789958,\n",
              " 1.0225647277079615,\n",
              " 1.0245812891764503,\n",
              " 1.0213831701850649,\n",
              " 1.0195579268984052,\n",
              " 1.0135046198925155,\n",
              " 1.0152532191757195,\n",
              " 1.022048501587721,\n",
              " 1.0163574247121696,\n",
              " 1.0066667213528497,\n",
              " 1.0068354736179006,\n",
              " 1.0127220919895976,\n",
              " 1.0203756646584685,\n",
              " 1.0305054396661841,\n",
              " 1.0240370173496167,\n",
              " 1.0224914263712732,\n",
              " 1.0215626759801812,\n",
              " 1.0316477877452321,\n",
              " 1.0208259666249382,\n",
              " 1.0240122170563888,\n",
              " 1.0187360412776534,\n",
              " 1.028851604601086,\n",
              " 1.0278263875843665,\n",
              " 1.0477191988468357,\n",
              " 1.0560027065237243,\n",
              " 1.0599168306604547,\n",
              " 1.0636643540165451,\n",
              " 1.0721433377767433,\n",
              " 1.070497928254808,\n",
              " 1.0774221795894623,\n",
              " 1.0726257218578952,\n",
              " 1.0748715367116395,\n",
              " 1.0451972108028382,\n",
              " 1.0481654809230052,\n",
              " 1.0436329770311137,\n",
              " 1.0308460612570147,\n",
              " 1.0247634179600704,\n",
              " 1.024265018541334,\n",
              " 1.0192873202298698,\n",
              " 1.0245041618346291,\n",
              " 1.012063153613925,\n",
              " 1.0195146543237907,\n",
              " 1.0181394240040815,\n",
              " 1.0162116923115647,\n",
              " 1.034246547220589,\n",
              " 0.9911819713931114,\n",
              " 0.9711200194408007,\n",
              " 0.9908063568038509,\n",
              " 1.0136908796213417,\n",
              " 1.0281992249129186,\n",
              " 1.0338219080457924,\n",
              " 1.0290123492407823,\n",
              " 1.0417233779049082,\n",
              " 1.0439646024679592,\n",
              " 1.0596108323483655,\n",
              " 1.0654978485833135,\n",
              " 1.0664445511269296,\n",
              " 1.0604390951250466,\n",
              " 1.0645868779736312,\n",
              " 1.0687684398230453,\n",
              " 1.0707109595386104,\n",
              " 1.0667621810586538,\n",
              " 1.0864685821715392,\n",
              " 1.0997859892206137,\n",
              " 1.1087869097344896,\n",
              " 1.111258790204425,\n",
              " 1.1133359812480743,\n",
              " 1.1123655592491235,\n",
              " 1.1182899161880455,\n",
              " 1.1205001144254174,\n",
              " 1.1332881182480148,\n",
              " 1.1531852847586082,\n",
              " 1.1484835039900652,\n",
              " 1.1450433137903218,\n",
              " 1.1561464491408835,\n",
              " 1.1496773485988276,\n",
              " 1.15200707800886,\n",
              " 1.1440640807288962,\n",
              " 1.1516354374226498,\n",
              " 1.1527908400952118,\n",
              " 1.1548284068487107,\n",
              " 1.1503113351485181,\n",
              " 1.1505823804342217,\n",
              " 1.1517367027940006,\n",
              " 1.1535857375416603,\n",
              " 1.1589465498889833,\n",
              " 1.1637220615011152,\n",
              " 1.1495490752457274,\n",
              " 1.1463380237449678,\n",
              " 1.151514789982637,\n",
              " 1.1522658865786854,\n",
              " 1.1514477568010775,\n",
              " 1.1487666136919625,\n",
              " 1.1518101175041857,\n",
              " 1.1627873076140358,\n",
              " 1.1666709261601427,\n",
              " 1.1625744683041555,\n",
              " 1.1550913889111412,\n",
              " 1.120831698430723,\n",
              " 1.1420386204158102,\n",
              " 1.1252399259519044,\n",
              " 1.1248615831050934,\n",
              " 1.139373648281384,\n",
              " 1.1406928703174029,\n",
              " 1.1407974514687471,\n",
              " 1.1462308289238863,\n",
              " 1.1629162199773564,\n",
              " 1.1733186736784984,\n",
              " 1.167551906329175,\n",
              " 1.1580415208721928,\n",
              " 1.1733936584415374,\n",
              " 1.1757454239326781,\n",
              " 1.1627375227082901,\n",
              " 1.1736914574091821,\n",
              " 1.1726888068034618,\n",
              " 1.1697958848955952,\n",
              " 1.173847059763659,\n",
              " 1.168994057854665,\n",
              " 1.1662886618810968,\n",
              " 1.1667610212072004,\n",
              " 1.143717687061004,\n",
              " 1.13776739597805,\n",
              " 1.1366990941539692,\n",
              " 1.1311731382555694,\n",
              " 1.1298805505317056,\n",
              " 1.1405436339313162,\n",
              " 1.1398781926089177,\n",
              " 1.1421583998012537,\n",
              " 1.136840472374044,\n",
              " 1.1494482161471047,\n",
              " 1.1429464772814493,\n",
              " 1.1470918984878473,\n",
              " 1.13466453911493,\n",
              " 1.1232313959973999,\n",
              " 1.123822244767359,\n",
              " 1.1199241505457989,\n",
              " 1.108736740442665,\n",
              " 1.1038227083480863,\n",
              " 1.1042792733324902,\n",
              " 1.144819082021239,\n",
              " 1.1490191447898235,\n",
              " 1.1755048583141692,\n",
              " 1.1643598319448456,\n",
              " 1.1665118505468226,\n",
              " 1.1603885058960608,\n",
              " 1.1723974648315847,\n",
              " 1.1726428295587608,\n",
              " 1.186420078334575,\n",
              " 1.1816397676214982,\n",
              " 1.1935697251412158,\n",
              " 1.196513580556967,\n",
              " 1.184771805794956,\n",
              " 1.1877249094115485,\n",
              " 1.1824764258093126,\n",
              " 1.1817473273551982,\n",
              " 1.1612082038403748,\n",
              " 1.1436245380783512,\n",
              " 1.1468292267941977,\n",
              " 1.1556032263326126,\n",
              " 1.1607098470520503,\n",
              " 1.1652987207675791,\n",
              " 1.168235086404928,\n",
              " 1.167263290081966,\n",
              " 1.1616552823168083,\n",
              " 1.171660061899117,\n",
              " 1.1683071554925932,\n",
              " 1.171880728783509,\n",
              " 1.166924334322451,\n",
              " 1.165664412984666,\n",
              " 1.1760585829724544,\n",
              " 1.1724896506047746,\n",
              " 1.1717368073240333,\n",
              " 1.176707895898451,\n",
              " 1.1871811177009917,\n",
              " 1.1757984726981976,\n",
              " 1.174243194345847,\n",
              " 1.159435637989467,\n",
              " 1.1696884779031742,\n",
              " 1.1785376354599344,\n",
              " 1.1865889800570388,\n",
              " 1.1979261521598155,\n",
              " 1.2088967590931299,\n",
              " 1.208656529135541,\n",
              " 1.20040241497894,\n",
              " 1.2035809656653371,\n",
              " 1.2047577827972547,\n",
              " 1.1960996507953003,\n",
              " 1.2015532855147761,\n",
              " 1.2025504379132315,\n",
              " 1.2049653555659066,\n",
              " 1.202331413120178,\n",
              " 1.2106311809303605,\n",
              " 1.2193898173811244,\n",
              " 1.2229833900496059,\n",
              " 1.2281260131151583,\n",
              " 1.2174961328660412,\n",
              " 1.2168628351444213,\n",
              " 1.2228511273996359,\n",
              " 1.212740881792459,\n",
              " 1.2105128259647782,\n",
              " 1.2109453850658212,\n",
              " 1.2156205215142364,\n",
              " 1.226403193236588,\n",
              " 1.2329403068418987,\n",
              " 1.239127349899542,\n",
              " 1.2445136701910289,\n",
              " 1.251231739438595,\n",
              " 1.2641466614992571,\n",
              " 1.263559649443194,\n",
              " 1.2630904436439834,\n",
              " 1.2682028883471888,\n",
              " 1.266457590739378,\n",
              " 1.256989554274023,\n",
              " 1.2624925493036632,\n",
              " 1.2710321399569864,\n",
              " 1.2643915055724606,\n",
              " 1.2798378539966249,\n",
              " 1.273832680546223,\n",
              " 1.280991803018864,\n",
              " 1.2756233562485872,\n",
              " 1.2694383887255754,\n",
              " 1.2756940435410116,\n",
              " 1.2760586318269627,\n",
              " 1.2856403352330978,\n",
              " 1.2906992805262876,\n",
              " 1.2870144468838505,\n",
              " 1.2934406566291976,\n",
              " 1.2783749617197804,\n",
              " 1.282428173449692,\n",
              " 1.28274156740269,\n",
              " 1.266373072320469,\n",
              " 1.2779281186083178,\n",
              " 1.2745637099830847,\n",
              " 1.2766548511832285,\n",
              " 1.2785628835481686,\n",
              " 1.2816196049271014,\n",
              " 1.2909634490914206,\n",
              " 1.2920922997704927,\n",
              " 1.2963862529225465,\n",
              " 1.2922849262186935,\n",
              " 1.2967359759711592,\n",
              " 1.2905707790207521,\n",
              " 1.2883098768102044,\n",
              " 1.2892086290596814,\n",
              " 1.2882899844198754,\n",
              " 1.2851570133929275,\n",
              " 1.2814182369085143,\n",
              " 1.2786832549580986,\n",
              " 1.285176349282826,\n",
              " 1.283592083153945,\n",
              " 1.2841668146822218,\n",
              " 1.29415087952155,\n",
              " 1.294659401915942,\n",
              " 1.311437880243955,\n",
              " 1.3235329825348567,\n",
              " 1.3133995703240358,\n",
              " 1.3164719368826296,\n",
              " 1.3106123807952013,\n",
              " 1.318600304212448,\n",
              " 1.3173906972241765,\n",
              " 1.3144919505989332,\n",
              " 1.3137289971189179,\n",
              " 1.3110487755213098,\n",
              " 1.3080547854439448,\n",
              " 1.3139558753906067,\n",
              " 1.3240611170113963,\n",
              " 1.3209179031177578,\n",
              " 1.3251164948070109,\n",
              " 1.3388690247279316,\n",
              " 1.345250590034174,\n",
              " 1.3104044968295625,\n",
              " 1.3271441595131697,\n",
              " 1.3309160223632968,\n",
              " 1.3427262642346887,\n",
              " 1.3414910209283808,\n",
              " 1.356957910407776,\n",
              " 1.367320363106626,\n",
              " 1.3654285782530415,\n",
              " 1.3624810140493795,\n",
              " 1.3650139578254203,\n",
              " 1.3750672135876323,\n",
              " 1.3884711015681106,\n",
              " 1.3875007606522725,\n",
              " 1.380944951597821,\n",
              " 1.3835084135130624,\n",
              " 1.3890041496735608,\n",
              " 1.3603255623575194,\n",
              " 1.3562622018559387,\n",
              " 1.3670631829173705,\n",
              " 1.3591445289037387,\n",
              " 1.3545746228912767,\n",
              " 1.3549795133453675,\n",
              " 1.3794472770054316,\n",
              " 1.3783439906734807,\n",
              " 1.4051966789567019,\n",
              " 1.405896401323398,\n",
              " 1.4083527393652817,\n",
              " 1.4021694287254847,\n",
              " 1.3705386129962476,\n",
              " 1.38982879518586,\n",
              " 1.3624877857866244,\n",
              " 1.361280110738653,\n",
              " 1.3510518698969152,\n",
              " 1.3653195015276631,\n",
              " 1.353382125069156,\n",
              " 1.3707465176921354,\n",
              " 1.3784271889087316,\n",
              " 1.382556547202994,\n",
              " 1.4011138654696247,\n",
              " 1.4000967627643308,\n",
              " 1.4106630197976398,\n",
              " 1.411671875192036,\n",
              " 1.4201908685725033,\n",
              " 1.4403327748061951,\n",
              " 1.4424745736463076,\n",
              " 1.4514870002399936,\n",
              " 1.4572718749194744,\n",
              " 1.4516831287064453,\n",
              " 1.4743472641619924,\n",
              " 1.4548475979589273,\n",
              " 1.4487434411480222,\n",
              " 1.4375037348078774,\n",
              " 1.4402926772763878,\n",
              " 1.4336700441537245,\n",
              " 1.4354478879283856,\n",
              " 1.4394098868168217,\n",
              " 1.4520716017607533,\n",
              " 1.4442301311482628,\n",
              " 1.4422570315158874,\n",
              " 1.4051127031189556,\n",
              " 1.415830568931772,\n",
              " 1.4380453232045391,\n",
              " 1.4388149795552088,\n",
              " 1.4466861265869675,\n",
              " 1.4153464610101292,\n",
              " 1.4138731422403712,\n",
              " 1.4138671069694562,\n",
              " 1.4382679818067905,\n",
              " 1.4288397119363097,\n",
              " 1.4303359347548708,\n",
              " 1.4260413792711222,\n",
              " 1.4359597590669178,\n",
              " 1.4396070512281496,\n",
              " 1.4678589753437752,\n",
              " 1.4904284713623355,\n",
              " 1.4935827318648116,\n",
              " 1.4780161757954382,\n",
              " 1.4796537998404422,\n",
              " 1.4964715803115374,\n",
              " 1.4901309851438398,\n",
              " 1.5014269901919406,\n",
              " 1.5038751557819454,\n",
              " 1.5034003099070505,\n",
              " 1.496563941699166,\n",
              " 1.500810801007112,\n",
              " 1.5038951910329972,\n",
              " 1.5034122484301287,\n",
              " 1.497244001210242,\n",
              " 1.485580438689823,\n",
              " 1.487111955829036,\n",
              " 1.467392195308049,\n",
              " 1.4652861972954885,\n",
              " 1.4806050830664024,\n",
              " 1.482935041061313,\n",
              " 1.4977338983580246,\n",
              " 1.4996950363007184,\n",
              " 1.5015685040930213,\n",
              " 1.5050681052949209,\n",
              " 1.522793908518051,\n",
              " 1.5314487885543522,\n",
              " 1.531578346862429,\n",
              " 1.5366667335496933,\n",
              " 1.5402361819109969,\n",
              " 1.54572919488357,\n",
              " 1.5559160307148627,\n",
              " 1.5559912488157948,\n",
              " 1.5626474735137421,\n",
              " 1.5592308705304985,\n",
              " 1.5643396356048251,\n",
              " 1.565380967793677,\n",
              " 1.5484477231089686,\n",
              " 1.5414873779761014,\n",
              " 1.5311993981857666,\n",
              " 1.5299977464547425,\n",
              " 1.575369972135151,\n",
              " 1.5791909636294064,\n",
              " 1.5764662775972038,\n",
              " 1.561884661265065,\n",
              " 1.556790113929227,\n",
              " 1.5718421281483612,\n",
              " 1.5731149013525727,\n",
              " 1.5733838038432721,\n",
              " 1.5809172590159108,\n",
              " 1.5656809776313907,\n",
              " 1.5726674692919902,\n",
              " 1.5800866976642607,\n",
              " 1.5788040245980917,\n",
              " 1.5704959399772012,\n",
              " 1.587988864778299,\n",
              " 1.5829329774767902,\n",
              " 1.5735492087368044,\n",
              " 1.5818854986976318,\n",
              " 1.5828791180654762,\n",
              " 1.592719858850259,\n",
              " 1.5940485099024604,\n",
              " 1.6026991127582302,\n",
              " 1.5731031742710864,\n",
              " 1.59319105598508,\n",
              " 1.579240428436398,\n",
              " 1.5512443524303179,\n",
              " 1.5551128972396533,\n",
              " 1.5580330283235002,\n",
              " 1.5703780789622195,\n",
              " 1.5844985177156135,\n",
              " 1.594215363504107,\n",
              " 1.585474538310445,\n",
              " 1.592711785288889,\n",
              " 1.584405662107107,\n",
              " 1.6021569949274532,\n",
              " 1.6073122939862996,\n",
              " 1.6041586049267134,\n",
              " 1.6075327242199742,\n",
              " 1.5987318782173705,\n",
              " 1.5908625343195955,\n",
              " 1.5901454043815884,\n",
              " 1.593845987453403,\n",
              " 1.5956236960895427,\n",
              " 1.5841206472435732,\n",
              " 1.6204701333305735,\n",
              " 1.6422783091146753,\n",
              " 1.6490335478765978,\n",
              " 1.6659634508482304,\n",
              " 1.6642241678853351,\n",
              " 1.6667071335751142,\n",
              " 1.664223125388171,\n",
              " 1.6692845147580453,\n",
              " 1.6844958650159434,\n",
              " 1.6822179894071256,\n",
              " 1.7061951963739235,\n",
              " 1.7083811353161793,\n",
              " 1.7162784142768488,\n",
              " 1.7382493084238466,\n",
              " 1.7518685415684994,\n",
              " 1.7425714707769377,\n",
              " 1.7509182976813227,\n",
              " 1.7873782537178005,\n",
              " 1.7771746930311447,\n",
              " 1.7643119576062918,\n",
              " 1.776451443248675,\n",
              " 1.7573101450984825,\n",
              " 1.7350691871652777,\n",
              " 1.6694106810506277,\n",
              " 1.707832731130976,\n",
              " 1.6842986842528544,\n",
              " 1.6102429652608894,\n",
              " 1.6365366153048084,\n",
              " 1.6581697002576998,\n",
              " 1.6687135783518885,\n",
              " 1.6812860941495889,\n",
              " 1.7065129531929972,\n",
              " 1.6938996649219367,\n",
              " 1.6990045947573074,\n",
              " 1.6935104139909944,\n",
              " 1.6912388347252705,\n",
              " 1.72670819253524,\n",
              " 1.7415655689198675,\n",
              " 1.7242598737367634,\n",
              " 1.717285139498179,\n",
              " 1.686741379949045,\n",
              " 1.708184432615262,\n",
              " 1.727975280477307,\n",
              " 1.7351755411853687,\n",
              " 1.7392117023181648,\n",
              " 1.7470897806008179,\n",
              " 1.7788788479401023,\n",
              " 1.7805824419006417,\n",
              " 1.7697633156162111,\n",
              " 1.7673172211360164,\n",
              " 1.7680748821204848,\n",
              " 1.7710504701807717,\n",
              " 1.736112584552595,\n",
              " 1.7561090550379026,\n",
              " 1.7509140998232426,\n",
              " 1.702465502974245,\n",
              " 1.6574572121811764,\n",
              " 1.719322502810287,\n",
              " 1.6623876462929124,\n",
              " 1.645589032788564,\n",
              " 1.6686093064148557,\n",
              " 1.616518500806131,\n",
              " 1.6347645005771732,\n",
              " 1.6606740274132283,\n",
              " 1.65947634693229,\n",
              " 1.6084643973599762,\n",
              " 1.61639953353177,\n",
              " 1.6559989519624805,\n",
              " 1.6484585533224252,\n",
              " 1.6709561143338998,\n",
              " 1.6570553692088508,\n",
              " 1.664831870533195,\n",
              " 1.7002489802309118,\n",
              " 1.7053863604623936,\n",
              " 1.688261828119787,\n",
              " 1.6675891161534335,\n",
              " 1.6586886157773741,\n",
              " 1.6331456993397135,\n",
              " 1.6335116730155903,\n",
              " 1.6743791738071068,\n",
              " 1.686585991731208,\n",
              " 1.672115165522592,\n",
              " 1.6881496827383675,\n",
              " 1.675259631127131,\n",
              " 1.678196457610004,\n",
              " 1.7024619845424556,\n",
              " 1.712608630212276,\n",
              " 1.712276645646741,\n",
              " 1.7355348318250647,\n",
              " 1.7497066614877659,\n",
              " 1.7523986088849752,\n",
              " 1.7535338367045321,\n",
              " 1.7310310010589625,\n",
              " 1.7400295013809224,\n",
              " 1.735395268150456,\n",
              " 1.733612608934673,\n",
              " 1.7365027284711632,\n",
              " 1.7322886518031744,\n",
              " 1.7469316128538754,\n",
              " 1.7474344192749287,\n",
              " 1.7528101709000554,\n",
              " 1.746396593116011,\n",
              " 1.7688964444628659,\n",
              " 1.7652684088459152,\n",
              " 1.788696598812927,\n",
              " 1.8032657071521203,\n",
              " 1.8125478062326332,\n",
              " 1.8241507421490086,\n",
              " 1.81316965620409,\n",
              " 1.8198246763467587,\n",
              " 1.8228545577056794,\n",
              " 1.833912004683643,\n",
              " 1.840437693813505,\n",
              " 1.85371564075801,\n",
              " 1.8485653620566174,\n",
              " 1.8313676221344979,\n",
              " 1.827240830143921,\n",
              " 1.8379264129200323,\n",
              " 1.8236762946238634,\n",
              " 1.8163024509293226,\n",
              " 1.7762868409196542,\n",
              " 1.7823387170228948,\n",
              " 1.7511477113871974,\n",
              " 1.7721382286603258,\n",
              " 1.7885537240321872,\n",
              " 1.8055785500927017,\n",
              " 1.7878863693336602,\n",
              " 1.8104388417596424,\n",
              " 1.88196693517446,\n",
              " 1.8909544830521037,\n",
              " 1.888718126892892,\n",
              " 1.884848670863813,\n",
              " 1.918829383311497,\n",
              " 1.9258466469516344,\n",
              " 1.9249363152305474,\n",
              " 1.9452817091884484,\n",
              " 1.9516783752591662,\n",
              " 1.943048864391351,\n",
              " 1.9510971421625765,\n",
              " 1.9501520614009094,\n",
              " 1.960536839292359,\n",
              " 1.9970495618285962,\n",
              " 1.9485346437039084,\n",
              " 1.9249590534412182,\n",
              " 1.885340390389305,\n",
              " 1.8943831652337648,\n",
              " 1.9073454436933763,\n",
              " 1.9259479638648171,\n",
              " 1.926599092149042,\n",
              " 1.9326499927992697,\n",
              " 1.9488792334269855,\n",
              " 1.9544313030453453,\n",
              " 1.9495856705874146,\n",
              " 1.9360289791488456,\n",
              " 1.9332213026201883,\n",
              " 1.9495531095244383,\n",
              " 1.9232051636181149,\n",
              " 1.9294492660205338,\n",
              " 1.9244890567920758,\n",
              " 1.9257042339585273,\n",
              " 1.9328930511520532,\n",
              " 1.949481277608739,\n",
              " 1.948510847887587,\n",
              " 1.9628812248263818,\n",
              " 1.9781665515942566,\n",
              " 1.983108015495876,\n",
              " 2.013680595782606,\n",
              " 2.003941555530657,\n",
              " 2.0062310173448443,\n",
              " 2.005559825021202,\n",
              " 1.9772496584269081,\n",
              " 1.9588141221345092,\n",
              " 1.950187670250678,\n",
              " 1.9542676795516616,\n",
              " 1.9621734344351343,\n",
              " 1.9574419968385475,\n",
              " 1.9713429908964748,\n",
              " 1.972737297636261,\n",
              " 1.9406790571469854,\n",
              " 1.9580036172506585,\n",
              " 1.9484480424606094,\n",
              " 1.963788043540526,\n",
              " 1.9569160359222615,\n",
              " 1.9672610084919975,\n",
              " 1.9721197230228955,\n",
              " 1.9735086656089684,\n",
              " 1.9911848371792282,\n",
              " 1.9961979510074312,\n",
              " 2.001346875111176,\n",
              " 1.979757960322957,\n",
              " 1.9821384509045095,\n",
              " 1.9388575376872232,\n",
              " 1.922947054081249,\n",
              " 1.9007651392027567,\n",
              " 1.9053722391973695,\n",
              " 1.8193658756692699,\n",
              " 1.7900335416018494,\n",
              " 1.8397939224279054,\n",
              " 1.8114446316641006,\n",
              " 1.8797057382808526,\n",
              " 1.8769063901462055,\n",
              " 1.828480010718768,\n",
              " 1.802697256580451,\n",
              " 1.8092929932762836,\n",
              " 1.7934619556764062,\n",
              " 1.6961881565959853,\n",
              " 1.7559636811520725,\n",
              " 1.7142164349039286,\n",
              " 1.6745610232478199,\n",
              " 1.7041337954440687,\n",
              " 1.7373632149355718,\n",
              " 1.775775266217121,\n",
              " 1.7660493082311939,\n",
              " 1.761686882320969,\n",
              " 1.7728854949673498,\n",
              " 1.8340171888867776,\n",
              " 1.819219381809431,\n",
              " 1.7941848085802057,\n",
              " 1.73730338332056,\n",
              " 1.7440670122541024,\n",
              " 1.7238998042281306,\n",
              " 1.7630537737135858,\n",
              " 1.7440207099356189,\n",
              " 1.6787358308700808,\n",
              " 1.6658622727802253,\n",
              " 1.6780538678364056,\n",
              " 1.6773383904494585,\n",
              " 1.7182705048754223,\n",
              " 1.7271072359470707,\n",
              " 1.787596628058262,\n",
              " 1.7759078100787704,\n",
              " 1.7915761872322606,\n",
              " 1.8218372697988339,\n",
              " 1.7496337617769715,\n",
              " 1.7643957069518768,\n",
              " 1.6995251085371064,\n",
              " 1.7204869310680737,\n",
              " 1.721529026677599,\n",
              " 1.7374013317207677,\n",
              " 1.7307997454575152,\n",
              " 1.6822453087673337,\n",
              " 1.6429176978653641,\n",
              " 1.6389332582601979,\n",
              " 1.604660663039441,\n",
              " 1.5819140507528198,\n",
              " 1.5313652231940724,\n",
              " 1.5001589847133698,\n",
              " 1.5938964209680646,\n",
              " 1.601063613500057,\n",
              " 1.5991491277996728,\n",
              " 1.617998503577345,\n",
              " 1.6265065275709867,\n",
              " 1.5897053815182387,\n",
              " 1.6590932436997903,\n",
              " 1.6873795779440288,\n",
              " 1.7056596344371453,\n",
              " 1.7229534113911165,\n",
              " 1.7368277435917971,\n",
              " 1.7360450367210745,\n",
              " 1.7139563365334454,\n",
              " 1.7497162750298079,\n",
              " 1.743664795214489,\n",
              " 1.7625947483007363,\n",
              " 1.785192333826215,\n",
              " 1.756061928239301,\n",
              " 1.7515941908100106,\n",
              " 1.7631175915172814,\n",
              " 1.7897087481508627,\n",
              " 1.7586911022257792,\n",
              " 1.743042621323719,\n",
              " 1.7724017546495126,\n",
              " 1.7995791210294785,\n",
              " 1.7849514564469982,\n",
              " 1.8005013486663983,\n",
              " 1.8155983600902332,\n",
              " 1.8016179672744967,\n",
              " 1.7677962446484075,\n",
              " 1.7800776795618538,\n",
              " 1.7825660662368856,\n",
              " 1.8121986388465923,\n",
              " 1.817237124183108,\n",
              " 1.8205938692881334,\n",
              " 1.8324129492188157,\n",
              " 1.8307953789967573,\n",
              " 1.830220920548682,\n",
              " 1.8093947406056565,\n",
              " 1.826348955483762,\n",
              " 1.8312662693555517,\n",
              " 1.8325838350489096,\n",
              " 1.8326908184245385,\n",
              " 1.8337146896391971,\n",
              " 1.8566517971854837,\n",
              " 1.8465791973092287,\n",
              " 1.8390474255764548,\n",
              " 1.813553906484636,\n",
              " 1.7954180234881985,\n",
              " 1.7842821768932913,\n",
              " 1.8217752012860742,\n",
              " 1.828519825882427,\n",
              " 1.851205097002699,\n",
              " 1.8498193093837096,\n",
              " 1.8697643496807337,\n",
              " 1.8744097170434662,\n",
              " 1.8778892096334023,\n",
              " 1.8755864459144846,\n",
              " 1.8240576721490296,\n",
              " 1.7724353853029957,\n",
              " 1.7796401758697344,\n",
              " 1.8061796362272837,\n",
              " 1.7872351460972495,\n",
              " 1.7939130972083144,\n",
              " 1.8101781765718679,\n",
              " 1.8320970464925315,\n",
              " 1.83639817127602,\n",
              " 1.8454727852734756,\n",
              " 1.836817470423191,\n",
              " 1.8565866636306732,\n",
              " 1.8601555274136226,\n",
              " 1.8481411140788813,\n",
              " 1.86190360827264,\n",
              " 1.851985523827874,\n",
              " 1.8578728025249969,\n",
              " 1.851502420746081,\n",
              " 1.8491081143897794,\n",
              " 1.8373342992303476,\n",
              " 1.8382370179267007,\n",
              " 1.844445853607615,\n",
              " 1.872472381573631,\n",
              " 1.8625274053546608,\n",
              " 1.8699052876330202,\n",
              " 1.8864131669645046,\n",
              " 1.8851096178347102,\n",
              " 1.8903838723992832,\n",
              " 1.8785961213810127,\n",
              " 1.8763678324355215,\n",
              " 1.9031939506051072,\n",
              " 1.8986509369537372,\n",
              " 1.8576174900427718,\n",
              " 1.8584271435346331,\n",
              " 1.849860148951415,\n",
              " 1.8493747815773651,\n",
              " 1.7898540031032106,\n",
              " 1.8175247406871198,\n",
              " 1.8374969927547835,\n",
              " 1.8605993619554921,\n",
              " 1.8403853060992983,\n",
              " 1.816650393840667,\n",
              " 1.8356621559265833,\n",
              " 1.8402148666356013,\n",
              " 1.811171198449838,\n",
              " 1.8092882053223365,\n",
              " 1.807034901757784,\n",
              " 1.790443385643381,\n",
              " 1.7980490433973773,\n",
              " 1.772691794129294,\n",
              " 1.745735574294387,\n",
              " 1.7917234833554447,\n",
              " 1.804870677645344,\n",
              " 1.8121015383633836,\n",
              " 1.8414963135088838,\n",
              " 1.8633163535362098,\n",
              " 1.8575576343846865,\n",
              " 1.8513233955344348,\n",
              " 1.8579082858156348,\n",
              " 1.8485907374607804,\n",
              " 1.8557763088123587,\n",
              " 1.8788529758400985,\n",
              " 1.898966355567505,\n",
              " 1.9182294560630961,\n",
              " 1.920661708057448,\n",
              " 1.9177418570655618,\n",
              " 1.89289703915082,\n",
              " 1.9010118097618802,\n",
              " 1.916211625136158,\n",
              " 1.9186862261105537,\n",
              " 1.9457936887775749,\n",
              " 1.9458680996227584,\n",
              " 1.9595639332195827,\n",
              " 1.9466000199390854,\n",
              " 1.9357991139451713,\n",
              " 1.9480129943898654,\n",
              " 1.961449600719114,\n",
              " 1.960344165862286,\n",
              " 1.9688614412383159,\n",
              " 1.9721746864966228,\n",
              " 1.958182367154248,\n",
              " 1.9710339697171366,\n",
              " 1.9818369224341494,\n",
              " 1.9625617314078103,\n",
              " 1.9793996246299685,\n",
              " 1.9983899391977862,\n",
              " 2.0087916667649037,\n",
              " 1.9879187726552372,\n",
              " 1.9903532879881543,\n",
              " 1.9790776941155823,\n",
              " 1.9795365376126768,\n",
              " 1.94859627072298,\n",
              " 1.9476361465264598,\n",
              " 1.9254938532430697,\n",
              " 1.857167311955854,\n",
              " 1.8929254458664588,\n",
              " 1.900053905817903,\n",
              " 1.9458332373283755,\n",
              " 1.9237378030337882,\n",
              " 1.8962074761495722,\n",
              " 1.932732962785558,\n",
              " 1.8747126055131544,\n",
              " 1.8799118400358121,\n",
              " 1.9111773647587875,\n",
              " 1.938144820396462,\n",
              " 1.9234434172790802,\n",
              " 1.9438840684500656,\n",
              " 1.932711495066181,\n",
              " 1.8772370394234565,\n",
              " 1.8973034727235762,\n",
              " 1.8924641082219273,\n",
              " 1.891834100158025,\n",
              " 1.9145922611355626,\n",
              " 1.911726280292711,\n",
              " 1.8972712490165433,\n",
              " 1.9186072778350747,\n",
              " 1.9548364536719784,\n",
              " 1.9529751555822912,\n",
              " 1.9410148824496833,\n",
              " 1.9307234095409345,\n",
              " 1.93753269841393,\n",
              " 1.9404778716078743,\n",
              " 1.9420702226188724,\n",
              " 1.9389492244749371,\n",
              " 1.9516845013122788,\n",
              " 1.942912956113354,\n",
              " 1.9476027920111696,\n",
              " 1.9377315707560838,\n",
              " 1.9346805289441724,\n",
              " 1.906216077588262,\n",
              " 1.9338245693345046,\n",
              " 1.9295246244956397,\n",
              " 1.9037233566733542,\n",
              " 1.9197132229942646,\n",
              " 1.8972324924122268,\n",
              " 1.8666487804488907,\n",
              " 1.8881174365597335,\n",
              " 1.9125997108922674,\n",
              " 1.9082208855286558,\n",
              " 1.8732230949786108,\n",
              " 1.8938237346989188,\n",
              " 1.9050804945744768,\n",
              " 1.925906134998192,\n",
              " 1.9268345378168685,\n",
              " 1.9539659048975269,\n",
              " 1.9372328445106253,\n",
              " 1.9358621499339104,\n",
              " 1.9158261459676773,\n",
              " 1.936776902584304,\n",
              " 1.968299086247953,\n",
              " 1.963470934382468,\n",
              " 1.9989864227382776,\n",
              " 2.0032706883889073,\n",
              " 2.0202782647816817,\n",
              " 2.020804286610691,\n",
              " 2.037649662584048,\n",
              " 2.024162041478469,\n",
              " 2.0355083034460733,\n",
              " 2.0436094787280625,\n",
              " 2.045856781864272,\n",
              " 2.0351723245874043,\n",
              " 2.0361157332762865,\n",
              " 2.048079763371757,\n",
              " 2.0440651879072393,\n",
              " 2.0476460228974833,\n",
              " 2.040363685009288,\n",
              " 2.038126333998894,\n",
              " 2.0521949082558244,\n",
              " 2.0564715641443505,\n",
              " 2.0634988467884265,\n",
              " 2.057490525521699,\n",
              " 2.0494180574609477,\n",
              " 2.0626951094139154,\n",
              " 2.091290250500075,\n",
              " 2.100772446107856,\n",
              " 2.1134023957462023,\n",
              " 2.102325376741149,\n",
              " 2.0732152583343795,\n",
              " 2.065011679050192,\n",
              " 2.0723009264744516,\n",
              " 2.079420223655767,\n",
              " 2.0973015239913546,\n",
              " 2.083432931486615,\n",
              " 2.0856405196199765,\n",
              " 2.091402104140594,\n",
              " 2.1096520590454877,\n",
              " 2.1245688420769495,\n",
              " 2.141059392422103,\n",
              " 2.138860615196773,\n",
              " 2.1415443558786964,\n",
              " 2.155116232022068,\n",
              " 2.168505525521027,\n",
              " 2.169358069635847,\n",
              " ...]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}